<?php
/**
 * Create by Phpstorm
 * User: Peco
 * Date: 2019/12/12
 * Time: 16:02
 */

namespace App\Traits;

use App\Services\SmsService\SmsHelper;
use Illuminate\Support\Facades\Redis;

/**
 * 配置，短信配置
 * Trait SmsSetting
 * @package App\Traits
 */
trait Setting
{
    /**
     * TODO 使用Redis持久化存储 RDB 持久化方案
     * TODO 使用Redis持久化存储 在Redis配置文件 redis.conf中 将 "appendonly no"修改为 "appendonly yes"
     * TODO 使用缓存cache存储
     * @param $key
     * @param $value
     * @return mixed
     */
    public function storeSettingData($key, $value){
//        Cache::rememberForever($key, $value);
        return Redis::set($key, $value);
    }

    /**
     * 获取缓存的参数
     * @param string $key
     * @return mixed
     */
    public function getSettingCache(string $key){
        return Redis::get($key);
    }

    /**
     * 根据key获取短信模板Code或文字内容
     * @param $gateway
     * @param $key
     * @return \Illuminate\Config\Repository|mixed
     */
    protected function getSmsCode($gateway, $key)
    {
        return config("sms.templates.{$gateway}." . $key);
    }

    /**
     * 发送短信
     * @param $phone int 电话
     * @param $content
     * @param array $gateways 短信配置
     * @param $templateCode string 模板 verify_code
     * @param array $templateParam string 模板内容
     * @param null $smsGateway string 驱动
     * @return array
     */
    public function sendSms($phone, $content, $templateCode, $gateways, $templateParam = [], $smsGateway = null){
//        $gateways = \GuzzleHttp\json_decode($gateways);
        $gatewayDriver = data_get($gateways, 'key');//获取键key的值
        $config = array_merge(config('sms'), ['gateways'=>[$gatewayDriver=>$gateways['value']]]); //然后合并config配置文件中的数据，组成原始内容
        $content = $content ?: $this->getSmsCode($gatewayDriver, $templateCode);
        return (new SmsHelper($config))->send(
                $phone,
                $content,//发送内容
                $templateParam,
                $gatewayDriver
            );
    }

    /**
     * 获取缓存的参数
     * @param string $key
     * @return mixed
     */
    public static function getStaticSettingCache(string $key){
        $value = Redis::get($key);
        return $value ? \GuzzleHttp\json_decode($value, true) :[];
    }
}
